#
# Copyright (c) 2009, 2010, Davide Cittaro
# All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#     * Neither the name of the <organization> nor the
#       names of its contributors may be used to endorse or promote products
#       derived from this software without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#

# This module is here just to deal with 
# modification objects and xlinkers


class Modification():
	def __init__(self, name):
		self._name = name
		self._mmass = Modifications.getfloat(name, 'mmass')
		self._amass = Modifications.getfloat(name, 'amass')
		self._residues = Modifications.get(name, 'residues').split(',')
		self._modtype = Modifications.get(name, 'modtype')

		if self._residues[0] == '*':
			self._residues = ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'I', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y']
	def name(self):
		return self._name
	def mmass(self):
		return self._mmass
	def amass(self):
		return self._amass
	def residues(self):
		return self._residues
	def modtype(self):
		return self._modtype
		

class XLinker(Modification):
	def __init__(self, name):
		Modification.__init__(self, name)
		try:
			self._connections = Modifications.get(name, 'links').split(',')
		except:
			self._connections = []
	def connections(self):
		return self._connections
	def connectsWith(self, aa):
		if aa in self._connections:	
			return True
		return False